package ar.edu.utn.frba.tacs.warnes.beans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import ar.edu.utn.frba.tacs.warnes.aop.Utils;
import ar.edu.utn.frba.tacs.warnes.entities.Auto;
import ar.edu.utn.frba.tacs.warnes.entities.Pieza;
import ar.edu.utn.frba.tacs.warnes.utils.ConstantesWarnes;
import ar.edu.utn.frba.tacs.warnes.utils.ContenedorWarnes;
import ar.edu.utn.frba.tacs.warnes.utils.ConstantesWarnes.Categoria;

/**
 * @author dmiglino
 */
public class PiezaAbmBean extends BaseAbmBean<Pieza> {

	/**
	 * 
	 * @return lista de las categorias disponibles
	 */
	public List<SelectItem> getCategorias() {
		List<SelectItem> categorias = new ArrayList<SelectItem>();
		categorias.add(new SelectItem("", ""));
		categorias.add(new SelectItem(ConstantesWarnes.Categoria.NUEVOS
				.toString()));
		categorias.add(new SelectItem(ConstantesWarnes.Categoria.PARTES
				.toString()));
		categorias.add(new SelectItem(ConstantesWarnes.Categoria.USADOS
				.toString()));

		return categorias;
	}

	public String getCategoria() {
		Categoria cat = null;
		if (getObject() != null)
			cat = ((Pieza) getObject()).getCategoria();
		return cat != null ? cat.toString() : "";
	}

	public void setCategoria(String cat) {
		if (getObject() != null) {
			if (ConstantesWarnes.Categoria.NUEVOS.toString().equals(cat))
				((Pieza) getObject())
						.setCategoria(ConstantesWarnes.Categoria.NUEVOS);
			else if (ConstantesWarnes.Categoria.PARTES.toString().equals(cat))
				((Pieza) getObject())
						.setCategoria(ConstantesWarnes.Categoria.PARTES);
			else if (ConstantesWarnes.Categoria.USADOS.toString().equals(cat))
				((Pieza) getObject())
						.setCategoria(ConstantesWarnes.Categoria.USADOS);
			else
				((Pieza) getObject()).setCategoria(null);
		}
	}

	public Float getPrecio() {
		if (getObject() != null)
			return Utils.parseFloatTo2DecimalesHalfUp(((Pieza) getObject())
					.getPrecioSegunMoneda());
		return 0f;
	}

	public void setPrecio(Float precio) {
		((Pieza) getObject()).setPrecioEnPesos(precio
				* ContenedorWarnes.getInstance().getValorMoneda());
	}

	// TODO ahora uso la patente, despues hay que usar el id
	public List<SelectItem> getAutos() {
		List<SelectItem> autos = new ArrayList<SelectItem>();
		autos.add(new SelectItem("", ""));
		for (Auto auto : ContenedorWarnes.getInstance().getAutos()) {
			autos.add(new SelectItem(auto.getPatente(), auto.getPatente()));
		}
		return autos;
	}

	public String getAutoOrigen() {
		if (getObject() != null && ((Pieza) getObject()).getAutoOrigen() != null)
			return ((Pieza) getObject()).getAutoOrigen().toString();
		return "";
	}

	public void setAutoOrigen(String id) {
		if (id != null && !"".equals(id))
			((Pieza) getObject()).setAutoOrigen(ContenedorWarnes.getInstance()
					.getAutos(id).get(0));
		else
			((Pieza) getObject()).setAutoOrigen(null);
	}

	@Override
	protected void initObject() {
		if (getObject() == null)
			setObject(ContenedorWarnes.getInstance().creaUnaPieza());
	}

	@Override
	protected void doBeforeCancelar() {
		ContenedorWarnes.getInstance().borrarPieza(getObject());
	}

}
